package br.com.atenas.sigop.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.atenas.sigop.dto.LivroDTO;

public class LivroDAO {
	private String tabela = " SIGOP.TB002_LIVRO ";

	public LivroDTO gravar(LivroDTO livro, Connection conn) throws Exception{
		String sql = "INSERT INTO" + tabela + 
		"(NU_MATERIAL, DE_TITULO, NO_AUTOR, DE_EDICAO, DE_ESTADO, DE_OBSERVACAO, QTD_LIVRO)" +
		"  VALUES (?, ?, ?, ?, ?, ?, ?)";
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		preecherPK(livro, conn);
		ps.setBigDecimal(index++, livro.getNuMaterial());
		ps.setString(index++, livro.getTitulo());
		ps.setString(index++, livro.getAutor());
		ps.setString(index++, livro.getEdicao());
		ps.setString(index++, livro.getEstado());
		ps.setString(index++, livro.getObservacao());
		ps.setBigDecimal(index++, livro.getQuantidade());
		ps.executeUpdate();
		ps.close();
		conn.close();
		return livro;
	}
	
	private void preecherPK (LivroDTO livro, Connection conn)throws Exception{
		String sql = "select SQ002_LIVRO.nextval from dual";
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		rs.next();
		livro.setNuMaterial(rs.getBigDecimal(1));
	}
	
	public List<LivroDTO> pesquisar(LivroDTO livro, Connection conn) throws Exception{
		List<LivroDTO> livros = new ArrayList<LivroDTO>();
		String sql = " SELECT NU_MATERIAL, DE_TITULO, NO_AUTOR, DE_EDICAO, DE_ESTADO," +
				     " DE_OBSERVACAO, QTD_LIVRO FROM " + tabela +
					 " WHERE DE_TITULO LIKE ?";
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, livro.getTitulo()+"%");
		
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			LivroDTO livroResultado = new LivroDTO();
			livroResultado.setNuMaterial(rs.getBigDecimal("NU_MATERIAL"));
			livroResultado.setTitulo    (rs.getString("DE_TITULO"));
			livroResultado.setAutor     (rs.getString("NO_AUTOR"));
			livroResultado.setEdicao	(rs.getString("DE_EDICAO"));
			livroResultado.setEstado	(rs.getString("DE_ESTADO"));
			livroResultado.setObservacao(rs.getString("DE_OBSERVACAO"));
			livroResultado.setQuantidade(rs.getBigDecimal("QTD_LIVRO"));
			livros.add(livroResultado);
		}
		return livros;
	}

	public void alterar(LivroDTO livro, Connection conn) throws Exception{
		
		String sql = "UPDATE " + tabela + " SET DE_TITULO = ?, NO_AUTOR = ?," +
					 " DE_EDICAO = ?, DE_ESTADO = ?, DE_OBSERVACAO = ?, QTD_LIVRO = ? WHERE NU_MATERIAL = ?";  
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setString(index++, livro.getTitulo());
		ps.setString(index++, livro.getAutor());
		ps.setString(index++, livro.getEdicao());
		ps.setString(index++, livro.getEstado());
		ps.setString(index++, livro.getObservacao());
		ps.setBigDecimal(index++, livro.getQuantidade());
		ps.setBigDecimal(index++, livro.getNuMaterial());
		ps.executeUpdate();
		ps.close();
	}

	public void excluir(LivroDTO livro, Connection conn) throws Exception{
		
		String sql = "DELETE FROM " + tabela + " WHERE NU_MATERIAL = ?";
		PreparedStatement ps = conn.prepareStatement(sql);
		int index = 1;
		ps.setBigDecimal(index++, livro.getNuMaterial());
		ps.executeUpdate();
		ps.close();
	}
}